/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import dao.DiplomaJpaController;
import dao.CursoJpaController;
import dao.SituacaoDoDiplomaJpaController;
import dao.TelefoneDiplomaJpaController;
import dao.TelefoneJpaController;
import dao.exceptions.IllegalOrphanException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import pagecontroller.JsfUtil;
import dao.exceptions.NonexistentEntityException;
import java.util.ArrayList;
import java.util.Date;
import modelo.Diploma;
import modelo.Curso;
import modelo.SituacaoAluno;
import modelo.SituacaoDiploma;
import modelo.SituacaoDoDiploma;
import modelo.Telefone;
import modelo.TelefoneDiploma;
import modelo.TipoCurso;
import modelo.TipoTelefone;
import pagecontroller.PageManager;

/**
 * @author Dirac
 */
public class DiplomaController {

    public DiplomaController() {
        //FacesContext facesContext = FacesContext.getCurrentInstance();
        if (JsfUtil.getObjectFromSession("DiplomaJpaController") == null) {
            jpaController = new DiplomaJpaController();
        } else {
            jpaController = (DiplomaJpaController) JsfUtil.getObjectFromSession("DiplomaJpaController");
        }
    }
    private Diploma diploma = null;
    private List<Diploma> diplomas = null;
    private DiplomaJpaController jpaController = null;
    private List<SituacaoAluno> situacoes = null;
    private List<Curso> cursos = null;
    private TipoCurso tipoCurso;
    private TipoTelefone tipoTelefone;
    private Telefone telefone;
    private List<TelefoneDiploma> telefonesDiplomas;
    private List<SituacaoDoDiploma> situacaoDosDiplomas;

    public void anulaVariaveis() {
        this.diploma = null;
        tipoCurso = null;
        telefone = null;
        situacaoDosDiplomas = null;
        telefonesDiplomas = null;
    }

    public List<TelefoneDiploma> getTelefonesDiplomas() {
        if (this.telefonesDiplomas == null) {
            this.telefonesDiplomas = new ArrayList<TelefoneDiploma>();
        }
        return telefonesDiplomas;
    }

    public void setTelefonesDiplomas(List<TelefoneDiploma> telefonesDiplomas) {
        this.telefonesDiplomas = telefonesDiplomas;
    }

    public Diploma getDiploma() {
        if (diploma == null) {
            diploma = new Diploma();
        }
        return diploma;
    }

    public String persiste() {
        if (this.diploma.getId() == null) {
            return create();
        } else {
            return update();
        }
    }

    public String create() {
        try {
            diploma.setTelefoneDiplomas(telefonesDiplomas);
            diploma.setSituacaoDiploma(SituacaoDiploma.EMITINDO);
            jpaController.create(diploma);

            SituacaoDoDiploma situacaoDoDiploma = new SituacaoDoDiploma();
            situacaoDoDiploma.setDia(new Date());
            situacaoDoDiploma.setDiploma(diploma);
            situacaoDoDiploma.setSituacaoDiploma(SituacaoDiploma.EMITINDO);
            situacaoDoDiploma.setDescricao("Diploma em Processo de Emissão");
            SituacaoDoDiplomaJpaController situacaoDoDiplomaJpaController = new SituacaoDoDiplomaJpaController();
            situacaoDoDiplomaJpaController.create(situacaoDoDiploma);
            getSituacaoDosDiplomas().add(situacaoDoDiploma);

            JsfUtil.addSuccessMessage("adicionado com sucesso");
            PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
            pm.setPageRelatDiploma();

        } catch (Exception e) {
            JsfUtil.addErrorMessage("Não foi possível crirar o registro");
        }
        return "refreshPage";
    }

    public String update() {
        try {

            jpaController.edit(this.diploma);
            JsfUtil.addSuccessMessage("diploma salvo com sucesso");
            PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
            pm.setPageRelatDiploma();


        } catch (NonexistentEntityException ex) {
            Logger.getLogger(DiplomaController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(DiplomaController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "refreshPage";
    }

    public String edit() {
        Diploma arq = (Diploma) JsfUtil.getObjectFromRequestParameter("diploma");
        this.diploma = arq;
        tipoCurso = arq.getCurso().getTipoCurso();
        return "refreshPage";
    }

    public String destroy() {

        try {
            //Diploma arq = (Diploma) JsfUtil.getObjectFromRequestParameter("diploma");
            jpaController.destroy(this.diploma.getId());
            anulaVariaveis();

            JsfUtil.addSuccessMessage("diploma removido com sucesso");



        } catch (IllegalOrphanException ex) {
            Logger.getLogger(DiplomaController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(DiplomaController.class.getName()).log(Level.SEVERE, null, ex);
        }

        return "refreshPage";
    }

    public List<Diploma> getDiplomas() {
        this.diplomas = jpaController.findDiplomaEntities();
        return this.diplomas;
    }

    public List<SituacaoAluno> getSituacoes() {
        this.situacoes = new ArrayList<SituacaoAluno>();
        for (SituacaoAluno situacao : SituacaoAluno.values()) {
            this.situacoes.add(situacao);
        }
        return this.situacoes;
    }

    public List<Curso> getCursos() {
        CursoController cursoController = new CursoController();
        CursoJpaController cursoJpaController = cursoController.getJpaController();
        if (tipoCurso == null) {
            cursos = cursoJpaController.findCursoEntities();
        } else {
            cursos = cursoJpaController.findByTipoCurso(tipoCurso);
        }
        return cursos;

    }

    public DiplomaJpaController getJpaController() {
        return jpaController;
    }

    public TipoCurso getTipoCurso() {
        return tipoCurso;
    }

    public void setTipoCurso(TipoCurso tipoCurso) {
        this.tipoCurso = tipoCurso;
    }

    public String novo() {
        anulaVariaveis();
        PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
        pm.setPageInserirDiploma();
        return "refreshPage";
    }

    

    public String load() {
        anulaVariaveis();
        diploma = (Diploma) JsfUtil.getObjectFromRequestParameter("diplomaAux");
        if(diploma == null){
            SituacaoDoDiplomaController sd = (SituacaoDoDiplomaController) JsfUtil.getObjectFromSession("SituacaoDoDiplomaController");
            diploma = sd.getDiploma();
        }

        TelefoneDiplomaJpaController telefoneDiplomaJpaController = new TelefoneDiplomaJpaController();
        telefonesDiplomas = telefoneDiplomaJpaController.findToDiploma(diploma);

        SituacaoDoDiplomaJpaController situacaoDoDiplomaJpaController = new SituacaoDoDiplomaJpaController();
        situacaoDosDiplomas = situacaoDoDiplomaJpaController.findToDiploma(diploma);


        PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
        pm.setPageRelatDiploma();
        return "refreshPage";
    }

    public Telefone getTelefone() {
        if (this.telefone == null) {
            this.telefone = new Telefone();
        }
        return telefone;
    }

    public void setTelefone(Telefone telefone) {
        this.telefone = telefone;
    }

    public TipoTelefone getTipoTelefone() {
        return tipoTelefone;
    }

    public void setTipoTelefone(TipoTelefone tipoTelefone) {
        this.tipoTelefone = tipoTelefone;
    }

    public List<TipoTelefone> getTiposTelefones() {
        return TipoTelefone.getList();
    }

    public String addTelefone() {
        TelefoneController telefoneController = (TelefoneController) JsfUtil.getObjectFromSession("TelefoneController");
        if (telefoneController == null) {
            telefoneController = new TelefoneController();
        }

        TelefoneDiploma telefoneDiploma = new TelefoneDiploma();
        telefoneDiploma.setDiploma(diploma);
        telefoneDiploma.setTelefone(telefone);

        this.telefonesDiplomas.add(telefoneDiploma);
        //se não for o cadastro do diploma, ele atualiza o telefone no banco
        if (diploma.getId() != null && diploma.getId() != 0) {
            TelefoneDiplomaJpaController telefoneDiplomaJpaController = new TelefoneDiplomaJpaController();
            telefoneDiplomaJpaController.create(telefoneDiploma);
        }

        telefone = null;

        return "refreshPage";
    }

    public String RemoverTelefone() {
        TelefoneDiploma telefonediploma = (TelefoneDiploma) JsfUtil.getObjectFromRequestParameter("telefoneDiplomaAux");
        TelefoneDiplomaJpaController telefonediplomaJpaController = new TelefoneDiplomaJpaController();
        try {
            telefonesDiplomas.remove(telefonediploma);
            if (diploma.getId() != null && diploma.getId() != 0) {
                telefonediplomaJpaController.destroy(telefonediploma.getId());
            }
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(DiplomaController.class.getName()).log(Level.SEVERE, null, ex);
        }

        return "refreshPage";
    }

    public List<SituacaoDoDiploma> getSituacaoDosDiplomas() {
        if(situacaoDosDiplomas == null)
            situacaoDosDiplomas = new ArrayList<SituacaoDoDiploma>();
        return situacaoDosDiplomas;
    }

    public void setDiploma(Diploma diploma) {
        this.diploma = diploma;
    }

    public void loadRelat(Diploma diploma) {
        anulaVariaveis();
        this.diploma = diploma;

        TelefoneDiplomaJpaController telefoneDiplomaJpaController = new TelefoneDiplomaJpaController();
        telefonesDiplomas = telefoneDiplomaJpaController.findToDiploma(diploma);

        SituacaoDoDiplomaJpaController situacaoDoDiplomaJpaController = new SituacaoDoDiplomaJpaController();
        situacaoDosDiplomas = situacaoDoDiplomaJpaController.findToDiploma(diploma);
    }
    public String loadRelat() {
        anulaVariaveis();
        diploma = (Diploma) JsfUtil.getObjectFromRequestParameter("diplomaAux");

        TelefoneDiplomaJpaController telefoneDiplomaJpaController = new TelefoneDiplomaJpaController();
        telefonesDiplomas = telefoneDiplomaJpaController.findToDiploma(diploma);

        SituacaoDoDiplomaJpaController situacaoDoDiplomaJpaController = new SituacaoDoDiplomaJpaController();
        situacaoDosDiplomas = situacaoDoDiplomaJpaController.findToDiploma(diploma);


        PageManager pm = (PageManager) JsfUtil.getObjectFromSession("PageManager");
        pm.setPageRelatDiploma();
        return "refreshPage";

    }

    public String removerSituacao() {
        SituacaoDoDiploma situacaoDoDiploma = (SituacaoDoDiploma) JsfUtil.getObjectFromRequestParameter("situacaoDoDiploma");
        SituacaoDoDiplomaJpaController situacaoDoDiplomaJpaController = new SituacaoDoDiplomaJpaController();
        try {
            situacaoDoDiplomaJpaController.destroy(situacaoDoDiploma.getId());
            this.getSituacaoDosDiplomas().remove(situacaoDoDiploma);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(SituacaoDoDiplomaController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "refreshPage";
    }


    

    
}
